#include<stdio.h>  
#include<stdbool.h>  
#include<string.h>  
#define N 5  
// 定义一个栈，用来存储排列
int stack[N];  
// 栈的顶部指针  
int top = -1;  
// 定义一个布尔数组 used，用来记录当前数字是否被使用过  
bool used[N];  
  
// DFS 搜索函数  
void dfs() {  
  // 如果栈的大小已经等于 N，说明找到了一个排列  
  if (top == N - 1) {  
    // 打印当前排列  
    for (int i = 0; i < N; i++) {  
      printf("%d ", stack[i]);  
    }  
    printf("\n");  
    return;  
  }  
  
  // 从 1 到 N 遍历所有数字  
  for (int i = 1; i <= N; i++) {  
    // 如果当前数字没有被使用过，则将它压入栈中  
    if (!used[i - 1]) {  
      used[i - 1] = true;  
      stack[++top] = i;  
      // 递归搜索  
      dfs();  
      // 回溯，将数字弹出栈  
      top--;  
      used[i - 1] = false;  
    }  
  }  
}  
  
int main() {  
// 初始化 used 数组，全部设为 false  
 for(int i=0;i<N;i++){  
   used[i]=false;  
 }  
  // 开始搜索  
  dfs();  
  return 0;  
}  
